home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / mainmenu.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  10KB  |  450 lines

  1. /*
  2.  * MeinMenu.c
  3.  *
  4.  * S'occupe de g‚rer le menu ppal
  5.  *
  6.  * 20.11.94: Created
  7.  */
  8.  
  9.      #include "!OPTIONS.H"                /* Options de compilation */         
  10.     #define    THIS_FILE    "MAINMENU.C v1.00 - 03.95"
  11.  
  12. /*
  13.  * System headers:
  14.  */
  15.     #include    <stdio.h>
  16.     #include <string.h>
  17.     #include    <stdlib.h>                    /* header librairie de fnct std */
  18.     #include <aes.h>
  19.     #include    <tos.h>                        /* Malloc pour KERMAP */
  20.     #include    <ctype.h>
  21.     #include    <ext.h>
  22.                   
  23. /*
  24.  * Custom headers:
  25.  */
  26.     #include "SPEC_PU.H"
  27.     #include "STUT_ONE.RSC\STUT_3.H"                    /* noms des objets ds le ressource */
  28.     #include    "WIN_PU.H"
  29.     #include "ARBKEYPU.H"
  30.     #include "DATPG_PU.H"    
  31.     #include "MAIN_PU.H"    
  32.     #include    "DEBUG_PU.H"    
  33.     #include "SHORT_PU.H"    
  34.     #include "MMENU_PU.H"    
  35.     #include    "OBJCT_PU.H"    
  36.     #include    "SERV_PU.H"    
  37.     #include "TEXT_PU.H"
  38.  
  39. /*
  40.  * Variables internes publiques:
  41.  */
  42.     OBJECT *    G_menu_adr;                    /* Ptr sur le MENU ! */
  43.  
  44. /*
  45.  * External prototypes:
  46.  */
  47.     extern    void    renommer_selection(
  48.                             GRECT        *    pGRect_start );        /* In: d‚but effet graphique d'ouverture */
  49.     extern    void    new_arbo( int type, const GRECT *start_box );
  50.     /* 
  51.      * Bases: 
  52.      */
  53.     extern    void    creer_rubrique( GRECT *start_box );
  54.  
  55.  
  56.     extern    void    compile_page( GRECT *pGRect_start );
  57.     extern    void    decompile_page( GRECT *pGRect_start );
  58.  
  59.     extern    void affecte_voies( const GRECT *start_box );
  60.  
  61.     extern    void    initialiser( void );
  62.     extern    void    sauver_param_inf( void );
  63.     extern    void    charger_param_inf ( void );
  64.     extern    void    set_compat( const GRECT *start_box );
  65.     extern    void    sauver_config_ini( void );
  66.     extern    WIPARAMS    *ouvre_fenetre( int class, int type,
  67.                                         DATAGROUP *datagroup, DATADIR *datadir, DATAPAGE *datapage,
  68.                                         const char *titre );
  69.     extern    void    put_wi_on_top( WIPARAMS *wi_params_adr );
  70.  
  71. /*
  72.  * ------------------------- METHODES ------------------------
  73.  */
  74.  
  75. /*
  76.  * init_MainMenu(-)
  77.  *
  78.  * Purpose:
  79.  * --------
  80.  * Init des prises s‚rie et des boŒtes de configuration
  81.  *
  82.  * Suggest:
  83.  * --------
  84.  * La d‚tection de support Bconmap doit ˆtre chang‚e:
  85.  * Detecter le type de BIOS avant d'appeller Bconmap.
  86.  *
  87.  * History:
  88.  * --------
  89.  * 20.11.94: fplanque: Created
  90.  */
  91. void    init_MainMenu( void )
  92. {
  93.     if (rsrc_gaddr( R_TREE, MENU, &G_menu_adr) == 0)
  94.         erreur_rsrc();
  95.     Create_KeyMap( G_menu_adr );
  96. }
  97.  
  98.  
  99.  
  100. /*
  101.  * selection_menu(-)
  102.  *
  103.  * Purpose:
  104.  * --------
  105.  * S‚lection d'une option menu
  106.  *
  107.  * History:
  108.  * --------
  109.  * 1993: fplanque: Created
  110.  * aprŠs: ajout de nouvelles entr‚es
  111.  * 20.11.94: Prend no title et Entry en parametre
  112.  * 22.11.94: teste si entry enabled avant d'appeller traitement
  113.  * 25.03.95: chg‚ ttmnt SYSTEMST
  114.  */
  115. void selection_menu(
  116.             int    menu_title,        /* In: Titre de menu s‚lectionn‚ */
  117.             int    menu_entry )    /* In: Entr‚e de menu s‚lectionn‚e */
  118. {
  119.     GRECT    menu_box;                /* Coord du titre menu s‚lectionn‚ */
  120.  
  121.     /*
  122.      * V‚rifie si l'option de menu est actuellement disponible
  123.      * c_a_d non gris‚e
  124.      */
  125.     if( ! objc_TestEnable( G_menu_adr, menu_entry ) )
  126.     {    /*
  127.           * D‚s‚lection titre, abandon
  128.           */
  129.         menu_tnormal( G_menu_adr, menu_title, 1);
  130.         return;    
  131.     }
  132.  
  133.     graf_mouse(BUSYBEE, 0);        /* Change curseur souris */
  134.  
  135.     /*
  136.      * D‚termine coordonn‚es du titre de menu s‚lectionn‚: 
  137.      */
  138.     objc_xywh( G_menu_adr, menu_title, &menu_box );
  139.  
  140.     /*
  141.      * En fonction de l'entr‚e s‚lectionn‚e 
  142.      */
  143.     switch( menu_entry )
  144.     {
  145.         case    INFOS:
  146.             apropos( &menu_box );
  147.             break;
  148.  
  149.        case    OUVRIR: 
  150.             ouverture();
  151.             break;
  152.  
  153.         case    FERMER:
  154.             /* Ferme fen sup‚rieure */
  155.             ferme_fenetre( G_wi_list_adr, TRUE_1 );    
  156.             break;
  157.  
  158.         case    SAUVER:
  159.             /* Sauve contenu fen sup‚rieure ds datapage associ‚e */
  160.             sauver_ram( G_wi_list_adr );
  161.             break;
  162.  
  163.         case    SAVEAS:
  164.             ping();
  165.             break;
  166.         
  167.         case    SAVEDISK:
  168.             sauver();
  169.             break;
  170.  
  171.         case    RENAME:
  172.             /*
  173.              * Renommer le fichier s‚lectionn‚ 
  174.              */
  175.             renommer_selection( &menu_box );    
  176.             break;
  177.  
  178.         case    PREMPLAN:
  179.             /*
  180.              * RamŠne dernier au 1er plan 
  181.              */
  182.             cycle_window();            
  183.             break;
  184.  
  185.         case    QUITTER:
  186.             /* Demande conf et tout ‡a... */
  187.             if( main_quitter() == TRUE_1 )
  188.             {
  189.                 G_fin=1;                        /* Signale qu'on veut quitter le prg */
  190.             }
  191.             break;
  192.  
  193.        case    MENNEWLK:
  194.             /*
  195.              * Cr‚er un nouveau lien dans la fen sup‚rieure: 
  196.              */
  197.             new_arbo( 0, &menu_box );                
  198.            break;
  199.  
  200.         case    MENNEWPG:
  201.             /* 
  202.              * Cr‚er une nlle page dans la fen sup‚rieure: 
  203.              */
  204.             new_arbo( 1, &menu_box );                
  205.            break;
  206.  
  207.         case    MENEWRUB:
  208.             /* 
  209.              * Cr‚er une nlle rubrique ds fen sup‚rieure: 
  210.              */
  211.             creer_rubrique( &menu_box );
  212.             break;
  213.  
  214.         case    MENEWTXT:
  215.             /* 
  216.              * Cr‚er une nouveau texte ds fen sup‚rieure: 
  217.              */
  218.             create_newText( &menu_box );
  219.             break;
  220.  
  221.         case    MENCOMPI:
  222.             /*
  223.              * Compile contenu de la fenˆtre sup‚rieure:
  224.              */
  225.             compile_page( &menu_box );
  226.             break;
  227.  
  228.         case    MENDECMP:
  229.             /*
  230.              * D‚Compile page ‚cran s‚lectionn‚e:
  231.              */
  232.             decompile_page( &menu_box );
  233.             break;
  234.  
  235.         case    STESTLOC:    
  236.             lancer_serv( SMODE_TEST, menu_title );        /* Test du serveur en mode local */
  237.               break;
  238.  
  239.         case    SLANCER:    
  240.             lancer_serv( SMODE_NORMAL, menu_title );    /* Lancement du serveur en mode normal */
  241.               break;
  242.  
  243.         case    SAFFECT:
  244.             affecte_voies( &menu_box );        /* Affectation de voies */
  245.             break;
  246.             
  247.         case    MINISERV:
  248.             initialiser();                            /* Initialisation du serveur */            
  249.             break;
  250.             
  251.         case    MLOADINF:
  252.             charger_param_inf();                    /* Charger chemins d'accŠs serveur + fichiers indiqu‚s */
  253.             break;
  254.  
  255.         case    MSAVEINF:
  256.             sauver_param_inf();        /* Sauver les chemins d'accŠs serveur */
  257.             break;
  258.             
  259.         case    PARAMETR:    
  260.             parametrage( &menu_box );
  261.             break;
  262.                         
  263.        case    AFFICHAG:
  264.             /*
  265.              * ParamŠtres d'affichage de la fen sup‚rieure: 
  266.              */
  267.             if    ( G_wi_list_adr != NULL )    /* S'il y a au - 1 fen ouverte: */
  268.             {
  269.                 switch( G_wi_list_adr -> menu_options.affichage )
  270.                 {
  271.                     case    PARAFF_TEXT:
  272.                         /*
  273.                          * Texte 
  274.                          */
  275.                         params_texte( &menu_box );                
  276.                         break;
  277.                         
  278.                     default:
  279.                         signale("Pas de params d'affichage pour cette fenetre");
  280.                 }
  281.             }
  282.            break;
  283.  
  284.         case    MECOMPAT:
  285.            /* Compatibilit‚: */
  286.             set_compat( &menu_box );
  287.             break;
  288.             
  289.         case    MSAVEINI:
  290.             sauver_config_ini();        /* Sauver configuration */
  291.             break;            
  292.            
  293.        case    VIDE: 
  294.            ouvre_fenetre( CLASS_EMPTY, TYP_EMPTY,
  295.                                NULL,NULL,NULL,
  296.                                " Sans titre " );
  297.               break;
  298.  
  299.         case    DEBUG:
  300.             if ( G_debug_window == NULL )
  301.             {    /*
  302.                  * Si Fenˆtre de d‚bugging pas encore ouverte: 
  303.                  */
  304.                   ouvre_fenetre( CLASS_TEXT, TYP_DEBUG,
  305.                                       NULL,NULL,NULL,
  306.                                       " Debug Information " );
  307.             }
  308.             else
  309.             {
  310.                 put_wi_on_top( G_debug_window );    /* Place fen au premier plan */
  311.             }
  312.               break;
  313.  
  314.             
  315.         case    SYSTEMST:        /* Demande status systŠme: */            
  316.         {
  317.             size_t    freemem = (size_t) Malloc( -1 );
  318.             size_t    scoreleft = coreleft();
  319.  
  320.             sprintf( G_tmp_buffer, "Freemem=%lu Kb   CoreLeft=%lu Kb", freemem, scoreleft );
  321.             add_textinf( G_debug_window, G_tmp_buffer );
  322.             break;
  323.         }
  324.             
  325.         default:                            /* Si on a pas pu traiter la demande */
  326.             signale("Pas de routines associ‚e");
  327.     }
  328.  
  329.  
  330.     /*
  331.      * D‚s‚lection de l'entr‚e de menu s‚lectionn‚e 
  332.      */ 
  333.     menu_tnormal(G_menu_adr, menu_title, 1);
  334.  
  335. }
  336.  
  337.  
  338.  
  339.  
  340. /*
  341.  * sauver_ram(-)
  342.  *
  343.  * Purpose:
  344.  * --------
  345.  * 'Sauvegarde' d'une datapage en ram
  346.  *
  347.  * History:
  348.  * --------
  349.  * 19.06.94: fplanque: Created base on sauver()
  350.  * 14.12.94: prend WIPARAMS* en arg
  351.  */
  352. void sauver_ram(
  353.             WIPARAMS    *    pWiParams )    /* In: fenˆtre dont il faut sauver le contenu */
  354. {
  355.     /*
  356.      * On va sauver le contenu de la fenˆtre au 1er plan:
  357.      */
  358.     if( pWiParams    == NULL 
  359.          || pWiParams -> class != CLASS_DATAPAGE )
  360.     {
  361.         ping();
  362.         return;
  363.     }
  364.  
  365.     /*
  366.      * S'il y a une fenˆtre au premier plan
  367.      */
  368.     switch ( pWiParams -> type )     /* Selon le type de fenˆtre */
  369.     {
  370.         case    TYP_TEXT:
  371.             /*
  372.              * Sauve le texte dans la page:
  373.              */
  374.             save_text2datapage( pWiParams -> content_ptr.textInfo,
  375.                                         pWiParams -> datapage );
  376.             /*
  377.              * Signale que la page a ‚t‚ modifi‚e:
  378.              */
  379.             dataPage_chgSavState( pWiParams -> datapage, SSTATE_MODIFIED, TRUE_1, TRUE_1 );
  380.  
  381.             /*
  382.              * Signale que le contenu de la fenˆtre n'a pas ‚t‚ modifi‚
  383.              * depuis la derniŠre sauvegarde:
  384.              */
  385.             Wnd_ClearModified( pWiParams );
  386.             break;
  387.             
  388.         default:
  389.             signale("Ne sait pas sauver le contenu de cette fenˆtre" );
  390.     }
  391. }
  392.  
  393.  
  394.  
  395. /*
  396.  * handle_keypress(-)
  397.  *
  398.  * Purpose:
  399.  * --------
  400.  * Traite l'appui sur une touche
  401.  * dans la boucle ppale du prg
  402.  * (Enfin pour l'instant on est limit‚ aux raccourcis claviers)
  403.  *
  404.  * History:
  405.  * --------
  406.  * 20.11.94: fplanque: Created
  407.  * 22.11.94: fplanque: utilisation de KEYTAB (thanks to P. Craponne)
  408.  * 08.01.95: renvoie code de retour
  409.  */
  410. BOOL    handle_keypress(            /* Out: TRUE_1 si reconnu */
  411.             int    n_kbd_state,     /* In: Etat du clavier lors de l'appui de touche */
  412.             int    n_ScanCode,     /* In: Scancode de la touche press‚e */
  413.             char    c_car    )            /* In: Code ascii de la touche */
  414. {
  415.     int            n_MenuTitle;
  416.     int            n_MenuEntry;
  417.     KEYTAB    *    pKeyTab;
  418.     
  419.     /* printf( "\r kbd_state:%X  ScanCode:%X  car=%d  ", n_kbd_state, n_ScanCode, (int)c_car ); */
  420.  
  421.     if( n_kbd_state && (K_CTRL | K_ALT) )
  422.     {    /*
  423.          * S'il faut retrouver le code ASCII:
  424.          */
  425.         pKeyTab = Keytbl( (void *) NIL_1, (void *) NIL_1, (void *) NIL_1 );
  426.     
  427.         c_car = toupper( (pKeyTab -> unshift)[ n_ScanCode ] );
  428.     }
  429.     
  430.     /* printf( "ultimately: %d   ", (int)c_car ); */
  431.  
  432.     n_MenuEntry = Lookup_Shortkey( n_kbd_state, n_ScanCode, c_car, &n_MenuTitle );
  433.     
  434.     if( n_MenuEntry != NIL_1 )
  435.     {    /*
  436.          * Si raccourci clavier reconnu:
  437.          * S‚lection titre:
  438.          */
  439.         menu_tnormal( G_menu_adr, n_MenuTitle, 0);
  440.         
  441.         /*
  442.          * Traitement associ‚:
  443.          */
  444.         selection_menu( n_MenuTitle, n_MenuEntry );
  445.         
  446.         return    TRUE_1;
  447.     }
  448.     
  449.     return    FALSE0;
  450. }